<?php

include('../../include/functions.inc.php');
if (!isEmpty(getParam('operation'))) {
    switch (getParam('operation')) {
        case 'change':
            changeStatus($db, $user);
            break;
    }
}

function changeStatus($db, $user) {
    $newStatus = getParam("value");
    $idFactura = getParam("id");
    if ($newStatus == "0") {
        anulaInvoice($db, $user);
    } else {
        $db->query_update("cllg_factura", array("STATUS" => sqlValue($newStatus, "int")), "ID=$idFactura");
    }
    echo "Listo!";
}

function permitidoAnular($db, $fechaFac) {
    $dia = date("d", strtotime($fechaFac));
    $mes = date("m", strtotime($fechaFac));
    $anio = date("Y", strtotime($fechaFac));
    $where = "DIA=" . $dia . " AND MES=" . $mes . " AND YEAR=" . $anio . " AND STATUS=1";
    $res = $db->query_select("cllg_cierre", $where);
    if (count($res) > 0) {  //ESTA DENTRO DE UN PERIODO CERRADO
        return FALSE;
    }
    return TRUE;
}

function anulaInvoice($db, $user) {
    $idFactura = getParam("id");
    $f = $db->query_select("cllg_factura", "ID=$idFactura AND (STATUS=1 OR STATUS=2)");
    if (count($f) > 0) {
        if (permitidoAnular($db, $f[0]["FECHA"])) {
            $c = $db->query_select("cllg_mov_cargo", "FK_FACTURA=$idFactura");
            if (count($c) > 0) {
                foreach ($c as $m) {
                    //busca cargo a modificar
                    $cargo = $db->query_select("cllg_cargo", "ID=" . $m["FK_CARGO"]);
                    $cargo = $cargo[0];
                    $monto = $cargo["TOTAL_PENDIENTE"] + $m["MONTO"];
                    //reversa el monto en el cargo
                    $db->query_update("cllg_cargo", array("TOTAL_PENDIENTE" => sqlValue($monto, "double"),
                        "DATE_PAYED" => sqlValue("", "date")), "ID=" . sqlValue($m["FK_CARGO"], "int"));
                    //anula el abono
                    $db->query_update("cllg_abono", array("STATUS" => sqlValue("0", "int")), "ID=" . sqlValue($m["FK_ABONO"], "int"));
                    //actualiza los saldos de cuenta corriente
                    $ac = $db->query_select("cllg_account", "ID=" . $cargo["FK_ACCOUNT"]);
                    $ac = $ac[0];
                    $cbalance = $ac["CURR_BALANCE"] + $monto;
                    $pbalance = $ac["CURR_BALANCE"];
                    $db->query_update("cllg_account", array("CURR_BALANCE" => sqlValue($cbalance, "double"),
                        "PREV_BALANCE" => sqlValue($pbalance, "double")), "ID=" . sqlValue($ac["ID"], "int"));
                }
            }
            //finalmente anula factura
            $db->query_update("cllg_factura", array("STATUS" => sqlValue("0", "int")), "ID=" . sqlValue($idFactura, "int"));
            echo "Factura Anulada.";
        } else {
            echo "No fue posible anular factura,ya se hizo el cierre respectivo! \n";
            echo "Fecha de Cierre: " . $f[0]["FECHA"] . ".";
        }
    } else {
        echo "No existe o ya esta anulada.";
    }
}

?>